package com.seres.util;

import cn.hutool.crypto.SecureUtil;
import lombok.extern.slf4j.Slf4j;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;

/**
 * @Description : 签名算法
 * @ClassName : SignUtils
 * @Author : 程磊
 * @Date: 2020-08-27 15:11
 */
@Slf4j
public class SignUtils {
    /**
     * 签名
     * @param key 签名key
     * @param parameters 待校验参数
     * @return
     */
    public static String sign(String key, SortedMap<String,Object> parameters){
        StringBuffer sb = new StringBuffer();
        Set<Map.Entry<String,Object>> es = parameters.entrySet();//所有参与传参的参数按照accsii排序（升序）
        Iterator<Map.Entry<String,Object>> it = es.iterator();
        while(it.hasNext()) {
            Map.Entry<String,Object> entry = it.next();
            String k = entry.getKey();
            Object v = entry.getValue();
            if(v != null && StringUtils.isNotBlank(v.toString())) {
                sb.append(k + "=" + v + "&");
            }
        }
        sb.append("key=" + key);
        log.info("签名字符串：{}",sb.toString());
        String sign = SecureUtil.md5(sb.toString()).toUpperCase();
        return sign;
    }
}
